package cn.xiaolang.function.design_pattern.singleton;

/**
 * 单例设计模式：(推荐)
 * DCL，即 double-checked locking
 * <p>
 * 多线程安全： 是
 * Lazy Loading： 是
 * 描述： 这种方式采用双锁机制，安全且在多线程情况下能保持高性能。唯一缺点就是书写麻烦。
 * </p>
 */
public class SingleTonLazyDcl {

    private static volatile SingleTonLazyDcl instance;

    // 私有化构造函数
    private SingleTonLazyDcl() {
    }

    public static SingleTonLazyDcl getInstance() {
        if (instance == null) {
            // 锁代码块，指令重排序会导致多实例问题，对instance做可见性volatile修饰
            synchronized (SingleTonStarted.class) {
                // double check
                if (instance == null) {
                    instance = new SingleTonLazyDcl();
                }
            }
        }
        return instance;
    }
}

